#region license
# This file is part of Grawlix.
# 
# Grawlix is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of
# the License, or (at your option) any later version.
# 
# Grawlix is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public
# License along with Grawlix.  If not, see
# <http://www.gnu.org/licenses/>.
#endregion

"""Convert from string to a service type."""

namespace Grawlix.Services.Converters
import Grawlix.Services
import System

transient class ServiceTypeConverter(ITypeConverter):
"""Convert to a service from a string."""
	
	def IsSupported([required] type as Type):
	"""
	Queries whether conversion to the specified type is
	possible with this converter.
	Param type: The type to try to convert to.
	Returns: true if possible, else false
	"""
		return type.IsInterface
	
	def Convert(
		[required] provider as ServiceProvider,
		[required] data as string,
		[required] type as Type):
	"""
	Converts the given data to the given type, if possible.
	Param provider: The service provider to recurse on, if needed.
	Param data: The string data to convert.
	Param type: The type to try to convert to.
	Returns: The converted object if successful.
	Raises ArgumentException: type is not supported.
	"""
		unless IsSupported(type):
			raise ArgumentException(
				"Specified type (${type}) is not supported.",
				"type")
		return provider.FindService(type, data)
	
	override def ToString():
	"""
	Get a string representation for this object.
	Returns: A string representation for this object.
	"""
		return "ServiceTypeConverter"
	
